package it.com.cci.strategy_pattern;

/**
 * @author Lefnmg
 * @Description:鸭子超类
 * @date 2018/3/24
 */
public abstract class Duck {
    FlyBehavior flyBehavior;//鸭子飞的行为
    QuackBehavior quackBehavior;//鸭子叫的行为
    public abstract void display();//展示鸭子外观 抽象方法

    public void setFlyBehavior(FlyBehavior flyBehavior) { //设定方法 set 方法动态改变鸭子的行为
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }

    public Duck() {
    }
    public void swim(){
        System.out.println("鸭子会游泳");
    }
    public void performFly(){//飞行行为委托给 行为对象
        flyBehavior.fly();
    }
    public void performQuack(){//呱呱叫行为 委托给 行为对象
        quackBehavior.quack();
    }
}
